1. Field of Invention
The present invention relates generally to the shared data storage field, and more particularly, to a packet based network file server with an improved data transfer method.
2. Description of Related Art
Packet based networks are built around a client/server relationship. Clients are devices or computers that request data to be received or sent from a server. In most applications, clients are personal computers. Servers are devices or computers that have services available for clients, and wait for a client to request these services. A files server is a server whose service is to provide an interface to a storage device connected to or embedded in the file server. File servers are very useful when data must be shared between several people on a local area network (LAN), or a wide area network (WAN).
Traditional file servers (see FIG. 1) contain a host processor 130 running a file system and network stack, system memory 150, peripheral bus 195, DMA engine 140 that copies data to and from devices on the peripheral bus 195 and the system memory 150, a storage device 170 connected to the peripheral bus 195 through a storage interface 160, and a network interface card (NIC) 180 connected to the peripheral bus 195. The NIC 180 consists of a network Physical interface 100, Network MAC 110, and network buffers 120.
The most common network protocol is TCP, which is first encapsulated in the IP protocol, and then in the Ethernet protocol. A TCP packet with payload is illustrated in FIG. 2. The payload 240 first is prefixed with a TCP header 230, and then an IP header 220, and finally an Ethernet header 210. As the entire packet 260 is being transmitted, a checksum is calculated, and then appended to the end 250. FIG. 3 illustrates a packet containing file transfer data. These packets are still encapsulated in TCP packets, but also contain one or more file server protocol headers. Therefore the data payload 350 from the storage device 170 is first encapsulated in at least one file server protocol header 340, then in a TCP header 330, then an IP header 320, and finally an Ethernet header 310. During transmission, the Ethernet checksum 360 is appended to the end of the packet 370. For ease of discussion, the file server protocol headers 380 will include the Ethernet header 310, IP header 320, TCP header 330, and all the file server headers 340.
A connection between a client and server is referred to as a socket. For a TCP connection, the server's IP address, client's IP address, server's port number, and client's port number identify the socket. Every TCP packet contains a sequence number and an acknowledge number. When a client sends a packet to the server, the client will insert the client's sequence number in the sequence number field, and the client's version of the server's sequence number in the acknowledge field. Whenever the client sends a packet with any payload, the client will increment the client's sequence number following the transmission of the packet by the client. Whenever the client receives a packet from the server, the client will first increment the client's version of the server's sequence number by the number of bytes received in the payload of the packet. The client will the send an acknowledge packet to the server using the new value of the client's version of the server's sequence number. Using this method, packet order can be determined at the receiver, and the transmitter can determine what packets have been received by the receiver. If an acknowledge packet is not received within a period of time, the transmitter will resend the previously transmitted packet.
There are two types of packets the file server must handle. The first is packets received from the client to the file server. These receive packets include those with payloads bound for the file server's processor, and those with data for the storage device. The second packet is transmitted from the file server's storage device to the client. These transmit packets could include packet generated only in the processor's network stack. The only difference being the payload did not have to be read from the storage device first.